#ifndef CHEVALET_H_INCLUDED
#define CHEVALET_H_INCLUDED

#include "SacLettres.h"
#include "stdio.h"
#include "stdlib.h"
#include <string.h>

/** @struct sChevalet
    @brief Structure contenant l'ensemble des lettres jouables
    @details Le chevalet est rempli à partir d'un tirage au hasard dans un sac de lettre (cf. #SacLettres)
    @param tabLettres [IN-OUT] un tableau contenant six  lettres
*/

struct sChevalet
{
    char * tabLettres;
}; typedef struct sChevalet Chevalet;

/** @fn chevInitialiser(Chevalet * pChev)
    @brief Procédure permettant d'initiliaser le chevalet à vide
    @param pChev [IN-OUT] pointeur sur une structure de type \e Chevalet
*/
void chevInitialiser(Chevalet * pChev);

/** @fn chevLiberer(Chevalet * pChev)
    @brief Procédure permettant de libérer le chevalet
    @param pChev [IN-OUT] pointeur sur une structure de type \e Chevalet
*/
void chevLiberer(Chevalet * pChev);

/**
    @fn chevRemplir(Chevaler * pChev)
    @brief Procédure permettant de remplir le chevalet
    @details Au  début il y rajoute 6 lettres puis complète selon les lettres utilisées par les joueurs
    @param pChev [IN-OUT] pointeur sur une structure de type \e Chevalet
*/
void chevRemplir(Chevalet * pChev);
/**
    @fn chevGetLettre(const Chevalet * pChev,const int i)
    @brief Fonction permettant de récupérer une lettre du chevalet
    @param pChev [IN-OUT] Pointeur sur une structure de type \e Chevalet
    @param i [IN] Indice de la lettre dans le chevalet
    @return Un \e char correspondant à une lettre du chevalet
*/
char chevGetLettre(const Chevalet * pChev,const int i);
/**
    @fn  chevRechLettre(const Chevalet * pChev,const char lettre)
    @brief Fonction permettant de rechercher une lettre du chevalet
    @param pChev [IN-OUT] Pointeur sur une structure de type \e Chevalet
    @param Lettre recherchée
    @return Un \e int représentant l'indice de la lettre dans le chevalet
*/
int chevRechLettre(const Chevalet * pChev,const char lettre);
/**
    @fn  chevSuppLettre(Chevalet * pChev,int indice)
    @brief Procédure permettant de supprimer une lettre du chevalet
    @param pChev [IN] Pointeur sur une structure de type \e Chevalet
    @param indice [IN] Position de la lettre à supprimer
*/
void chevSuppLettre(Chevalet * pChev,const int indice);
/**
    @fn   chevTestCaseVide(const Chevalet * pChev,const int indice)
    @brief Fonction permettant de tester si une case  est vide
    @param pChev [IN-OUT] Pointeur sur une structure de type \e Chevalet
    @param [IN] indice  un entier dans le chevalet
    @return Un \e unsigned \e int évalué a 1 si la case est vide et 0 sinon.
*/
unsigned int chevTestCaseVide(const Chevalet * pChev,const int indice);
/**
    @fn   chevSet(Chevalet * pChev, const int indice,const char lettre)
    @brief Procédure permettant de changer une  lettre du chevalet
    @param pChev [IN-OUT] Pointeur sur une structure de type \e Chevalet
    @param indice [IN] position de la lettre à poser dans le chevalet
    @param lettre [IN] caractère à mettre dans le chevalet
*/
void chevSet(Chevalet * pChev, const int indice,const char lettre);

void   testRegresion_Chevalet();

#endif
